分组后分组合计以及总计SQL语句(稍微整理了一下) 您所在的位置:网站首页 sql 分组查询 分组后分组合计以及总计SQL语句(稍微整理了一下)

分组后分组合计以及总计SQL语句(稍微整理了一下)

2022-12-15 04:31| 来源: 网络整理| 查看: 265

今天看到了这个文章感觉内容挺多的,就是比较乱,实在不好整理,脚本之家小编就简单整理了一下,希望大家能凑合看吧

分组后分组合计以及总计SQL语句   1)想一次性得到分组合计以及总计,sql:

SELECT 分组字段 FROM 表 GROUP BY 分组字段 compute sum(COUNT(*))

2)分组合计1:

SELECT COUNT(*) FROM (SELECT 分组字段 FROM 表 GROUP BY 分组字段 )别名

  3)分组合计2:

SELECT COUNT(*) FROM (SELECT distinct 分组字段 FROM 表)别名

4)统计分组后的种类数:   例子1:分组合计

SELECT JSSKQK_JGH FROM SJ_JSSKQK WHERE JSSKQK_JGH IN (SELECT JSJBXX_JGH FROM SJ_JSJBXX WHERE JSJBXX_JSLXM1=1) GROUP BY JSSKQK_JGH HAVING ((SUM(JSSKQK_SSKCXS1) /40)>5)

上面的语句已经可以满足要求分组了.假设执行后有3条记录,怎么才能把这个COUNT值求出?

select count(*) from ( SELECT JSSKQK_JGH FROM SJ_JSSKQK WHERE JSSKQK_JGH IN (SELECT JSJBXX_JGH FROM SJ_JSJBXX WHERE JSJBXX_JSLXM1=1) GROUP BY JSSKQK_JGH HAVING ((SUM(JSSKQK_SSKCXS1) /40)>5) ) t

例子2:[PL/SQL] 如何得到分组后,组中最大日期的纪录

TABLE:A A        B                C        D 1        2001/01/01                        1        1 1        2001/12/12                        2        2 3        2002/01/01                        3        3 3        2003/12/12                        4        4

按列A分组,请问如何得到每组中时间最大的数据?

1        2001/12/12                        2        2 3        2003/12/12                        4        4

我的笨方法:

SELECT * FROM A WHERE (A,B) IN( SELECT A,MAX(B) FROM A GROUP BY A )

有更好的方法吗?

1,select * from a out where b = (select max(b) from a in                          where in.a = out.a)

2,Select * from (select a, row_number() over (partition by a order by b desc) rn from a) where rn=1

3,Select a, b,c,d from (select a, b,c,d,row_number() over (partition by a order by b desc) rn from a) where rn=1

4,select A,B,C,D from test

  where rowid in   (      select rd from      (      select rowid rd ,rank() over(partion A order by B desc)rk from test      ) where rk=1             )   )

例子3:SQL语句分组获取记录的第一条数据的方法 使用Northwind 数据库

首先查询Employees表

查询结果:

city列里面只有5个城市

使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 先进行分组 注:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).

sql语句为:

select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID) as new_index from Employees

执行结果图:

可以看到是按照City分组,EmployeeID排序。

select出分组中的第一条记录

执行语句:

select * from (select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID) as new_index from Employees) a where a.new_index=1

执行结果图:

例子4:sql 获取分组结果后,如何每一组的第一条记录 Eric   red   20 eric   blue  30 andy red   10 andy  blue  5

例如,只获取黑体的记录。

1,declare @fTable table (fName varchar(10), fColor varchar(10), fOrder int)   insert into @fTable values('Eric', 'red', 20) insert into @fTable values('eric', 'blue', 30) insert into @fTable values('andy', 'red', 10) insert into @fTable values('andy', 'blue', 5)   -- 只获取红色 select * from @fTable where fColor = 'red' -- 每个 fColor 取一条记录(按 fOrder 正序) select * from @fTable A where fName = (select top 1 fName from @fTable where fColor = A.fColor order by fOrder ) -- 每个 fColor 取一条记录(按 fOrder 反序) select * from @fTable A where fName = (select top 1 fName from @fTable where fColor = A.fColor order by fOrder desc)   2,SQL2005以上版本 select * from (select *,row=row_number()over(partition by Color order by Color) from table1)t where row=1 and color='xx'--加上條件

SQL2000用 top 1

例子5:一条SQL语句搞定分组并且每组限定记录集的数量   如果我想得到这样一个结果集:分组,并且每组限定记录集的数量,用一条SQL语句能办到吗?

比如说,我想找出学生期末考试中,每科的前3名,只用一条SQL语句,该怎么写?

表[TScore]的结构

code      学号 char subject  科目 int score     成绩 int

可以这样写:

    SELECT [code]         ,[subject]         ,[score]     FROM (         SELECT *         ,RANK() OVER(PARTITION BY subject ORDER BY score DESC) AS Row         FROM TScore     ) AS a     WHERE Row



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有